package com.example.java_websocket.web.controller;


import com.example.java_websocket.model.ChatHistory;
import com.example.java_websocket.model.User;
import com.example.java_websocket.service.IUserService;
import com.example.java_websocket.vo.PageVo;
import com.example.java_websocket.vo.RsetResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@Controller
// 使用restful接口
@RestController
@RequestMapping("/user") // 统一添加 /user 前缀
public class UserController {
    /**
     * 引入IUserService接口,Sping自动去提供他的实现bean
     */
    @Autowired
    private IUserService userService;
    /*
       提供用户crud接口：增删改查

       返回信息:{
           status: 0, // 状态码
           message: '', // 错误消息
           data: {}, // 查询结果
       }
        */
    // 新增接口
    @PostMapping("add")
    //@Validated注解一起使用，以启用对请求体数据的验证。
    public RsetResultVo<String> add(@Validated @RequestBody User user){
        //@RequestBody注解，可以方便地处理来自客户端的复杂数据,格式为User
       String user2 = userService.add(user);
        return RsetResultVo.success(user2);
    }

    // 修改接口
    @PostMapping("edit")
    public RsetResultVo edit(@Validated @RequestBody User user){
        User user2 = userService.editByUserId(user);
        return RsetResultVo.success(user2);
    }

    // 删除接口
    @GetMapping("delete")
    public RsetResultVo<Integer> delete(String userId){
        Integer user2 = userService.deleteOne(userId);
        return RsetResultVo.success(user2);
    }

    // 详情接口
    @GetMapping("detail")
    public RsetResultVo<User> detail(String userId){
        User user = userService.detail(userId);
        return RsetResultVo.success(user);
    }


    @GetMapping("all")
    public RsetResultVo getChatHistory(){
        List<ChatHistory> user =userService.getChatHistory();
        return RsetResultVo.success(user);
    }

    //分页查询
    @GetMapping("page")
    public RsetResultVo<PageVo<User>> page(String userName, Integer pageNumber, Integer pageSize){
        PageVo<User> page = userService.page(userName, pageNumber, pageSize);
        return RsetResultVo.success(page);
    }


}
